package cn.com.cifi.mars.util;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

import cn.com.cifi.mars.constant.*;
import cn.com.cifi.mars.entity.SignPlanVersion;
import org.apache.commons.lang.StringUtils;

public class VersionUtils {

    /**
     * 小版本递增
     *
     * @param version 版本号
     * @return 递增后的版本号
     */
    @Deprecated
    public static final String smallVersionInc(String version) {
        if (StringUtils.isBlank(version)) {
            return "V1.0";
        }
        if (!version.matches("V\\d\\.\\d")) {
            return null;
        }
        return "V" + new BigDecimal(version.substring(1))
                .add(new BigDecimal("0.1"))
                .toString();
    }

    /**
     * 大版本递增，如传入V1.0则，返回V2.0
     *
     * @param version 版本号
     * @return 返回新版本，若版本号为空则返回V1.0
     */
    public static final String bigVersionInc(String version) {
        if (StringUtils.isBlank(version)) {
            return "V1";
        }
        if (!version.startsWith("V")) {
            return null;
        }

        String versionNum = "V" + (Integer.valueOf(StringUtils.substring(version, 1).replace(".0", ""))+1);
        return versionNum;
    }
    
    /**
     * 
     * 方法描述：拼接版本名称 ，如20190909-投资版
     * @param versionTypeKey
     * @return String
     * 创建人：yyd
     * 创建时间：2019年9月9日 上午11:41:13
     */
    public static final String versionNameInc(String versionTypeKey) {
    	String dateStr = DateUtils.dateToString(new Date(),DateUtils.DATE_KEY_SMALL_STR);
    	String versionType = VersionTypeEunm.getValueByKey(versionTypeKey);
    	return dateStr+"-"+versionType;
    }

    /**
     * 组合签约版本全路径名称
     * @param spv
     * @return
     */
    public static String getFullName(SignPlanVersion spv){
        String fullName=null;
        //版本名称规则
        //1、月度动态版
        //规则： {归属月份}月动态版{版本号}-{最后更新时间}
        //示例：201910月动态版V1-20191201
        //2、投资版、战规版、大定价版
        //规则：{版本类型}{版本号}-{最后更新时间}
        //示例：投资版V1-20191102，战规版V3-20191102，大定价版V2-20191102
        //3、预算版
        //规则：{预算年份}{全年/年中}预算版{版本号}-{最后更新时间}
        //示例：2019全年预算版V1-20181212，2019全年预算版V5-20190331，
        //2019年中预算版V1-20190501，2019年中预算版V5-20190831
        //4、审批通过后才显示最后更新时间，过程中不显示（显示状态）
        //版本号
        String versionNum = spv.getVersionNum();
        //版本类型
        String versionType = spv.getVersionType();
        //版本名称
        String versionName = VersionTypeEunm.getValueByKey(versionType);
        //最后更新时间
        LocalDateTime updateTime = spv.getUpdateTime();
        if(updateTime==null){
            updateTime=spv.getCreateTime();
        }
        //最后更新时间年-月-日
        String updateName = LocalDateTimeUtils.formatTime(updateTime, "yyyyMMdd");

        if(versionType.equals(VersionTypeEunm.INVESTMENT.getKey())){
            fullName=versionName+versionNum;
            if(spv.getIsAssessmentVersion() != null && spv.getIsAssessmentVersion() == WhetherEnum.YES.getKey()){
                fullName=fullName+"(考核版)";
            }
        }else if(versionType.equals(VersionTypeEunm.WARPLAN.getKey())) {
            fullName=versionName+versionNum;
        }else if(versionType.equals(VersionTypeEunm.DYNAMIC.getKey())) {
            //归属月份
            String yearMonth = spv.getAffiliationMonth().replace("-", "");
            fullName=yearMonth+"月"+versionName+versionNum;
        }else if(versionType.equals(VersionTypeEunm.BUDGET.getKey())){
            if(StrUtils.isNotEmpty(spv.getVersionIdentify())) {
            	if(spv.getVersionIdentify().equals(VersionIdentifyEnum.ALL_YEAR.getKey()) || spv.getVersionIdentify().equals(VersionIdentifyEnum.MID_YEAR.getKey())){
            		fullName = spv.getCompileYear()+VersionIdentifyEnum.getValueByKey(spv.getVersionIdentify())+versionNum;      	
            	}else {
            		fullName = spv.getVersionIdentify()+versionNum;
            	}
            }
        }
        if(spv.getVersionState().equals(VersionStatusEnum.SUCCESSAPPROVED.getKey())){
            fullName=fullName+"-"+updateName;
        }
        return fullName;
    }

}
